<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

/**
@ingroup CP_DONNEES
@nosubgrouping
@brief Actions sur un utilisateur

Une instance de cpPage représente un utilisateur du site.

Ses variables membres permettent d'accéder à toutes les données
de l'utilisateur issues de la base de données.

Ses méthodes permettent, entre autres, d'effectuer les actions suivantes:
- Modifier l'utilisateur
- Supprimer l'utilisateur
- Accéder aux préférences de l'utilisateur
- Vérifier si l'utilisateur est un superadmin
*/

class cpUtilisateur
{
	
	
	
	
	
	protected $core;			///< <b>cpCore</b>	Instance de cpCore
	
	public $utilisateur_id;
	public $utilisateur_superadmin;
	public $groupe_id;
	public $utilisateur_login;
	public $utilisateur_mot_de_passe;
	public $utilisateur_prenom;
	public $utilisateur_nom;
	public $utilisateur_pseudo;
	public $utilisateur_email;
	public $utilisateur_langue;
	public $utilisateur_preferences;
	public $utilisateur_statut;
	public $utilisateur_cle;
	public $utilisateur_date;
	public $utilisateur_date_modification;
	
	
	
	
	
	/// @name Initialisation et mise à jour des valeurs
	//@{
	
	
	/**
	Initialise une instance de cpUtilisateur.
	
	@param	rs			<b>recordset</b>	Données de la base de données
	@param	core		<b>cpCore</b>		Référence à cpCore
	*/
	public function __construct($rs, $core)
	{
		$this->core =& $core;
		$this->initRs($rs);	
	}
	
	
	/** @ignore */
	protected function initRs($rs)
	{
		$this->utilisateur_id = 			(integer) $rs->utilisateur_id;	
		$this->utilisateur_superadmin = 	(integer) $rs->utilisateur_superadmin;
		$this->groupe_id = 					(integer) $rs->groupe_id;
		$this->utilisateur_login = 			$rs->utilisateur_login;
		$this->utilisateur_mot_de_passe = 	$rs->utilisateur_mot_de_passe;
		$this->utilisateur_prenom = 		$rs->utilisateur_prenom;
		$this->utilisateur_nom = 			$rs->utilisateur_nom;
		$this->utilisateur_pseudo = 		$rs->utilisateur_pseudo;
		$this->utilisateur_email = 			$rs->utilisateur_email;
		$this->utilisateur_langue = 		$rs->utilisateur_langue;
		$this->utilisateur_preferences = 	unserialize($rs->utilisateur_preferences);
		$this->utilisateur_statut =			(integer) $rs->utilisateur_statut;
		$this->utilisateur_cle =			@unserialize($rs->utilisateur_cle);
		$this->utilisateur_date =			$rs->utilisateur_date;
		$this->utilisateur_date_modification = $rs->utilisateur_date_modification;
		
		# --COMPORTEMENT-- coreInitRsUtilisateur
		$this->core->executerComportement('coreInitRsUtilisateur', $rs, $this);
		
	}
	
	
	/**
	Met à jour les valeurs de cpUtilisateur pour qu'elles
	correspondent à celles de la base de données.
	
	Doit être appelée chaque fois qu'on modifie les données
	de l'utilisateur dans la base de données.
	*/
	public function rafraichir()
	{		
		$rs = $this->core->site->getUtilisateurs(array(
			'utilisateur_id' => (integer) $this->utilisateur_id
		), CP_GET_RS);
		
		$this->initRs($rs);
	}
	//@}
	

	
	
	
	/// @name Actions
	//@{
	
	
	/**
	Modifie les propriétés de l'utilisateur.
		
	@param	cur	<b>cursor</b>	Curseur d'utilisateur
	*/
	public function enregistrer($cur)
	{
		
		# Date
		$cur->utilisateur_date_modification	= dt::str('%Y-%m-%d %H:%M:%S');
		
		$this->core->site->verifierDonneesUtilisateur($cur, false, $this->utilisateur_id);
		
		# --COMPORTEMENT-- coreAvantEnregistrerUtilisateur
		$this->core->executerComportement('coreAvantEnregistrerUtilisateur', $cur, $this);
		
		$cur->update('WHERE utilisateur_id = '.(integer) $this->utilisateur_id);
		
		# --COMPORTEMENT-- coreApresEnregistrerUtilisateur
		$this->core->executerComportement('coreApresEnregistrerUtilisateur', $cur, $this);
		
		$this->rafraichir();
	}
	
	
	/**
	Supprime l'utilisateur.
	*/
	public function supprimer()
	{
		
		# --COMPORTEMENT-- coreAvantSupprimerUtilisateur
		$this->core->executerComportement('coreAvantSupprimerUtilisateur', $this);
		
		$this->core->con->execute(
			'DELETE FROM '.$this->core->prefix.'utilisateurs '.
			'WHERE utilisateur_id = '.(integer) $this->utilisateur_id
		);
		
		# --COMPORTEMENT-- coreApresSupprimerUtilisateur
		$this->core->executerComportement('coreApresSupprimerUtilisateur', $this);
		
	}
	//@}
	

	
	
	
	/// @name Préférences
	//@{
	
	
	/**
	Retourne la valeur d'une préférence de l'utilisateur.
	Si un deuxième paramètre est présent, la fonction modifie
	la préférence de l'utilisatuer.
		
	@param	pref	<b>string</b>	Nom de la préférence
	@param	val		<b>mixed</b>	Nouvelle valeur à affecter à la préférence
	
	@return	<b>mixed</b>	Valeur de la préférence
	*/
	public function preference($pref, $val=null)
	{
		
		if($val !== null)
		{
			
			$this->utilisateur_preferences[$pref] = $val;
			
			$cur = $this->core->con->openCursor($this->core->prefix.'utilisateurs');
			$cur->utilisateur_preferences = serialize($this->utilisateur_preferences);
			
			$this->enregistrer($cur);
			
			return $this->utilisateur_preferences[$pref];
			
		}
		
		return $this->utilisateur_preferences[$pref];
		
	}
	//@}
	
	
	
	
	
	/// @name Permissions
	//@{
	
	
	/**
	Indique si l'utilisateur est un superadmin.
	
	@return	<b>boolean</b>
	*/
	public function estSuperadmin()
	{
		if($this->utilisateur_superadmin == 1) {
			return true;
		}
		return false;		
	}
	//@}

	
}

?>